'''
Created on 22-11-2013

@author: Camilo

'''

import zipfile;
import glob;
import time;

class leerArchivos():
        
    def __init__(self):
        self.EjeX=[];
        self.EjeY=[];
        self.EjeZ=[];
        
        self.promEjeX=[];
        self.promEjeY=[];
        self.promEjeZ=[];
        
        self.Magnetometro="";
        self.t1=0;
        
    def abrirDirectorioArchivos(self):
        ruta="C:/Users/Camilo/Documents/Carisma/2007/"
        nombreMagnetom='GILL';
                
        self.t1=time.time();        
                
        rootZip = glob.glob(ruta+"*.zip") #Ruta para leer los zip descargados, carpeta raiz
        cantLineasPorArchivo=0;
        
        lineasLeidas=0;
        
        for archivoZip in rootZip:
            
            print "archivo zip: "+archivoZip
            
            archivosEnZip = zipfile.ZipFile(archivoZip,'r')
            for cadaArchivo in archivosEnZip.namelist():
                #print "comparacion: "+str(str(cadaArchivo).find(nombreMagnetom))
                if(str(cadaArchivo).find(nombreMagnetom) != -1): #Si el archivo contiene el nombre del magnetometro buscado, retornara un valor distinto a -1
                    #print cadaArchivo;
                    lineasEnArchivo =  archivosEnZip.open(cadaArchivo, "r", pwd=None) #Lectura por linea cada archivo plano.
                    
                    cantLineasPorArchivo=0;
                    
                    for line in lineasEnArchivo:
                        cantLineasPorArchivo+=1;
                                                
                        if not line or line==None:
                            break
                        
                        if(cantLineasPorArchivo > 1):
                            #datos=[]
                            fecha=line[0:14]
                            ejex=line[14:24]
                            ejey=line[25:34]
                            ejez=line[35:44]
                            lineasLeidas+=1;
                            
                            try:
                                self.EjeX.append(float(ejex));
                            except:
                                print("error lectura magnetometro archivo (X): ",str(cadaArchivo)," line: ", cantLineasPorArchivo)
                                break;
                            
                            try:
                                self.EjeY.append(float(ejey));
                            except:
                                print("error lectura magnetometro archivo (Y): ",str(cadaArchivo)," line: ", cantLineasPorArchivo)
                                break;
                            
                            try:
                                self.EjeZ.append(float(ejez));
                            except:
                                print("error lectura magnetometro archivo (Z): ",str(cadaArchivo)," line: ", cantLineasPorArchivo)
                                break;
                            
        print "Total de lineas leidas:"+str(lineasLeidas)
        
    ##Funcion que calcula promedios a traves de un array de datos.
    ##la variable tramo indicara la cantidad de datos para calcular un punto del promedio.                                
    def calcPromedios(self, tramo):
        arrayAux=[];
        sumaParcial=0.0;
        for componente in range(3):
            arrayAux=[];
            if (componente == 0):#Promedios Eje X
                arrayAux=list(self.EjeX);
                cantidadDatos=1;
                for elemento in arrayAux:
                    if(cantidadDatos <= tramo):
                        sumaParcial+=elemento;
                        
                    if(cantidadDatos >= tramo):
                        self.promEjeX.append(float(sumaParcial/tramo))
                        cantidadDatos=1;
                        sumaParcial=0;

                    cantidadDatos+=1;
                    
            if (componente == 1):#Promedios eje Y
                arrayAux=list(self.EjeY);
                cantidadDatos=1;
                for elemento in arrayAux:
                    if(cantidadDatos <= tramo):
                        sumaParcial+=elemento;
                        
                    if(cantidadDatos >= tramo):
                        self.promEjeY.append(sumaParcial/tramo)
                        cantidadDatos=1;
                        sumaParcial=0;
                        
                    cantidadDatos+=1;
                        
            if (componente == 2): #Promedios eje Z
                arrayAux=list(self.EjeZ);
                cantidadDatos=1;
                for elemento in arrayAux:
                    if(cantidadDatos <= tramo):
                        sumaParcial+=elemento;
                        
                    if(cantidadDatos >= tramo):
                        self.promEjeZ.append(sumaParcial/tramo)
                        cantidadDatos=1;
                        sumaParcial=0;
                    cantidadDatos+=1;
             
##probar clase 
"""
prueba=leerArchivos();
prueba.abrirDirectorioArchivos();
prueba.calcPromedios(500);

print "Con un tramo de 100000 para el magnetometro GILL se obtiene:"
print "Tamano promedio eje X: ",len(prueba.promEjeX);

print "Tamano promedio eje Y: ",len(prueba.promEjeY);

print "Tamano promedio eje Z: ",len(prueba.promEjeZ);

print "tiempo operacion: ",time.time()- prueba.t1;"""

        